<article>
    <h1><?php echo $GLOBALS["title"] ?></h1>
    <p>PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口，它  提供了一个数据访问抽象层，这样，无论使用什么数据库，都可以通  过一致的函数执行查询和获取数据。PDO随PHP5.1发行</p>
    <p>PHP通过PDO扩展动态加载相应的数据库驱动程序来完成直接操作各  种数据库，所以在使用PDO时要明确告知所要使用的数据库驱动</p>
    <h3>查看是否支持</h3>
    <p>通过<code>phpinfo()</code>查看是否成功加载</p>
    <img src="__PUBLIC__/images/pdo.png" alt="" width="100%">
   	<p><code>注意：</code>如果没加载，可以去php.ini看是否开启该扩展,如果前面有分号去掉</p>
   	<img src="__PUBLIC__/images/pdo_ext.png" alt="" width="100%">
   	<code></code>
   	<p><code>注意：</code>如果没有该扩展，百度"php pdo扩展安装"，有很多场景下的解决方案。</p>
	<h2><a>pdo的使用</a></h2>
	<h3>常用函数语法</h3>
	<h5>通过PDO连接MYSQL</h5>
	<code>$db = new PDO("dbtype:host=yourhost;dbname=yourdbname;charset=utf8","username","password");</code>
	<p>通过PDO类产生一个连接对象</p>
	<h5>发送执行sql(针对select)</h5>
	<code> PDO::query ( string $statement )</code>
	<p>通过查询，返回一个结果集对象</p>
	<h5>发关操作sql(针对UPDATE,DELETE,INSERT)</h5>、
	<code>int PDO::exec ( string $statement )</code>
	<p>执行一条 SQL 语句，并返回受影响的行数</p>
	<h5>取结果集中的数据</h5>
	<ul>
		<li><code>$result->fetchAll(PDO::FETCH_ASSOC)</code>只得到关联方式的数据</li>
		<li><code>$result->fetchAll(PDO::FETCH_NUM)</code>得到索引表示记录
		</li>
		<li><code>$result->fetchAll(PDO::FETCH_BOTH)</code>得到关联与索引表示的数据</li>
		<li><code>$result->fetchAll(PDO::FETCH_OBJ)</code>得到以对象形式表示的数据</li>
		<li><code>$result->fetch($type)</code>从结果集中获取下一行</li>
	</ul>
	<h5>错误代码</h5>
	<code>mixed PDO::errorCode ( void )</code>
	<p>获取跟数据库句柄上一次操作相关的 SQLSTATE</p>
	<h5>错误信息</h5>
	<code>public array PDO::errorInfo ( void )</code>
	<p>获取跟数据库句柄上一次操作错误信息</p>
	<h5>自增id</h5>
	<code>string PDO::lastInsertId ([ string $name = NULL ] )</code>
	<p>返回最后插入行的ID或序列值</p>
	<h3>完整实例</h3>
	<pre><code><?php echo htmlspecialchars('
Excute query with secure data
==============================
<?php
try{
	$db = new PDO("dbtype:host=yourhost;dbname=yourdbname;charset=utf8","username","password");
	$mysecuredata=14;
	$db->query("Select * from table where id=".$mysecuredata);
}catch(PDOException  $e ){
	echo "Error: ".$e;
}
?>
Excute query with insecure data
==============================
<?php
try{
	$db = new PDO("dbtype:host=yourhost;dbname=yourdbname;charset=utf8","username","password");
	$myinsecuredata=$_GET["id"];
	$query=$db->prepare("Select * from table where id=?");
	$query->excute(array($myinsecuredata));
}catch(PDOException  $e ){
	echo "Error: ".$e;
	}
?>
') ?></code></pre>
	<h2><a>Pdo预准备</a></h2>
	<p>预计准备的目的与mysqli预准备的是一样的，可以减少解析次数和防注入</p>
	<h3>实例</h3>
	<pre><code><?php echo htmlspecialchars('
<?php
	/* 通过绑定的 PHP 变量执行一条预处理语句,*/
	/*执行一条使用命名占位符的预处理语句  */
	$calories = 150;
	$colour = \'red\';
	$sth = $dbh->prepare(\'SELECT name, colour, calories
	    FROM fruit
	    WHERE calories < :calories AND colour = :colour\');
	$sth->bindParam(\':calories\', $calories, PDO::PARAM_INT);
	$sth->bindParam(\':colour\', $colour, PDO::PARAM_STR, 12);
	$sth->execute();
?>
<?php
	/*  通过绑定的 PHP 变量执行一条预处理语句*/
	/*执行一条使用问号占位符的预处理语句*/
	$calories = 150;
	$colour = \'red\';
	$sth = $dbh->prepare(\'SELECT name, colour, calories
	    FROM fruit
	    WHERE calories < ? AND colour = ?\');
	$sth->bindParam(1, $calories, PDO::PARAM_INT);
	$sth->bindParam(2, $colour, PDO::PARAM_STR, 12);
	$sth->execute();
?>
') ?></code></pre>
	<h3>作业</h3>
    <blockquote>
    	<ol>
    		<li>通过Pdo类，开发一个自己的操作数据库的类 Model.class.php</li>
    	</ol>
    </blockquote>
</article>